import dayjs from 'dayjs'
/**
 * 时间日期转换
 * @param date 当前时间，new Date() 格式
 * @param format 需要转换的时间格式字符串
 * @description format 字符串随意，如 `YYYY-mm、YYYY-mm-dd`
 * @description format 季度："YYYY-mm-dd HH:MM:SS QQQQ"
 * @description format 星期："YYYY-mm-dd HH:MM:SS WWW"
 * @description format 几周："YYYY-mm-dd HH:MM:SS ZZZ"
 * @description format 季度 + 星期 + 几周："YYYY-mm-dd HH:MM:SS WWW QQQQ ZZZ"
 * @returns 返回拼接后的时间字符串
 */
export const formatDate = (date: Date, format?: string) => {
  // 日期不存在，则返回空
  if (!date) {
    return ''
  }
  // 日期存在，则进行格式化
  return date ? dayjs(date).format(format ?? 'YYYY-MM-DD HH:mm:ss') : ''
}

/**
 * 将时间字符串转换为时间戳（毫秒）
 * @param timeStr 时间字符串，例如 '2025-07-02 15:00:00'
 * @param format 可选，自定义格式，例如 'YYYY-MM-DD HH:mm:ss'，不传则自动解析
 * @returns 时间戳（number），无效时间返回 NaN
 */
export function parseTimeToTimestamp(timeStr: string | number, format?: string): number {
  const d = format ? dayjs(timeStr, format) : dayjs(timeStr)
  return d.isValid() ? d.valueOf() : NaN
}

/**
 * 格式化日期时间字符串为标准格式
 * @param str 可被 Date 解析的时间字符串，如 '2025-07-02T10:20:30'
 * @param withTime 是否包含时分秒（默认 false，仅返回日期）
 * @param withSeconds 是否包含秒（默认 true，仅在 withTime 为 true 时生效）
 * @returns 格式化后的字符串，如 '2025-07-02 10:20:30'
 */
export function formatDateTime(str: string, withTime = false, withSeconds = true): string {
  const d = new Date(str)
  if (isNaN(d.getTime())) return '' // 无效时间

  const y = d.getFullYear()
  const m = String(d.getMonth() + 1).padStart(2, '0')
  const day = String(d.getDate()).padStart(2, '0')

  const dateStr = `${y}-${m}-${day}`

  if (!withTime) return dateStr

  const hh = String(d.getHours()).padStart(2, '0')
  const mm = String(d.getMinutes()).padStart(2, '0')
  const ss = String(d.getSeconds()).padStart(2, '0')

  return `${dateStr} ${hh}:${mm}${withSeconds ? `:${ss}` : ''}`
}
